
// 引入axios
import axios from "axios";
// 引入错误提示
import { ElMessage } from 'element-plus'
// 引入加载条
import nprogress from "nprogress";
// 引入路由
import router from "@/router/index.js"

// axios的配置模式
// axios的公共配置,只要是配置到了公共区域，其他地方的请求都会携带上配置内的信息
// 一般请求方式都不会写在公共配置内

let http = axios.create({
    // 请求的基础地址
    baseURL: '/api',
    // 请求超时设置，如果超时了就进入
    timeout: 1000 * 10, //请求超过10秒钟没响应就进入catch
    // 请求方式
    // method: 'post',
    // post请求携带参数
    // data:{uesrname:'',password:''}

    // 如果是get请求传参
    // params: { key: value }

    // 请求头
    // headers:{key:value}

})

// 请求拦截器
// 所有的请求发送到服务器之前, 都得通过这个关卡的检测, 如果通过, 我们就需要在函数中return config
// 作用: 可以在请求拦截器中给请求添加一些公共的信息(公共的请求头，公共的参数等等)

http.interceptors.request.use(config => {
    // 开启加载动画
    nprogress.set(0.3)
    // 请求拦截器
    // console.log(config)

    // 携带公共的请求头authorization 传递token给后台进行校验
    let token = sessionStorage.getItem('tk');

    // 把令牌交给后端进行身份验证
    config.headers.authorization = token;
  
    return config
})




http.interceptors.response.use(config => {
    // 关闭加载进度条
    nprogress.done()
    // 响应拦截器

    if (config.data.state) {
        // 当前接口来说，如果state为true，就是成功
        return config
    } else {
        // 当前接口来说，如果state为false，就是失败 公告弹窗，提示用户错误的信息

        ElMessage.error(config.data.msg)
    }
    // 登录过期或者校验失败的时候跳转到登录页面 并且清除token
    if(config.data.code==='1004' || config.data.code==='10022'){
        router.replace('login')
        sessionStorage.removeItem('tk')
        // 刷新页面
        
    }
    return Promise.reject(config.data.msg)

    
})


export default http


